<?php
/**
 * Klasse für Projekte
 */
class Model_Project extends Zend_Db_Table_Abstract
{
    /** Table name */
    protected $_name = 'project';
	/** Primary Key */
    protected $_primary = 'pid';

    public function createProject($data) {
    	
    	//Der Parameter edittype muss aus den Postdaten entfernt werden, da es kein entsprechendes DB-Feld gibt
    	unset($data['edittype']);
    	//@TODO: Macht es evtl. Sinn, hier ein Array mit erlaubten Feldnamen zu erstellen, über das dann die Postdaten gefiltert werden?
    	
    	//Der Key "tag" muss zunächst aus dem data-Array gekillt werden, aber vorher zwischengespeichert
    	$clients = $data['tag'];
    	unset($data['tag']);
    	//Billingdaten müssen aus $data entfernt werden und ein Objekt der Billing-Klasse übergeben werden
    	$billing = new Model_Billing();
    	$billingdata = array();
    	$billingfields = array('clientid', 'repetition', 'paydate', 'payweekday', 'payday', 'max_per_period');
    	foreach($data as $field => $value) {
    		if(in_array($field, $billingfields)) {
    			$billingdata[$field] = $value;
    			unset($data[$field]);
    		}
    	}
    	//Projekt in die Datenbank
    	$lastinsert_id = parent::insert($data);
    	//PID in den Billingdatenvermerken
    	$billingdata['pid'] = $lastinsert_id;
    	//Eintrag in der Billingdatenbank
    	$billing->createBilling($billingdata);  	
    	/*
    	 * Kunden-Projekt-Zuweisung
    	 */
    	$rels = new Model_RelProjectsUser();
    	//eine neue Relation für jedes der entsprechenden Inputfelder anlegen
    	foreach($clients as $key => $value) {
    		//ursprüngliches Format: client-uid-a; die nächsten beiden Zeilen extrahieren die UID
    		$uid = substr($key, 0, strpos($key, '-'));
    		$rels->createRel(array("uid" => $uid, "pid" => $lastinsert_id));
    	}    
    	
    	return $lastinsert_id;
    	
    }
    
	public function updateProject($pid, $data) {
    	
    	//Der Parameter edittype muss aus den Postdaten entfernt werden, da es kein entsprechendes DB-Feld gibt
    	//@TODO: Macht es evtl. Sinn, hier ein Array mit erlaubten Feldnamen zu erstellen, über das dann die Postdaten gefiltert werden?
		unset($data['edittype']);
    	unset($data['pid']);
    	/*
    	 * Kunden-Projekt-Zuweisung
    	 */
    	//erst alle Einträge zum aktuellen Projekt löschen
    	$rels = new Model_RelProjectsUser();
    	$rels->deleteRelsByProjectID($pid);
    	//anschließend eine neue Relation für jedes der entsprechenden Inputfelder anlegen
    	foreach($data['tag'] as $key => $value) {
    		//ursprüngliches Format: client-uid-a; die nächsten beiden Zeilen extrahieren die UID
    		$uid = substr($key, 0, strpos($key, '-'));
    		$rels->createRel(array("uid" => $uid, "pid" => $pid));
    	}    
    	unset($data['tag']);   	
    	//Billingdaten müssen aus $data entfernt werden und ein Objekt der Billing-Klasse übergeben werden
    	$billing = new Model_Billing();
    	$billingdata = array();
    	$billingfields = array('clientid', 'repetition', 'paydate', 'payweekday', 'payday', 'max_per_period');
    	foreach($data as $field => $value) {
    		if(in_array($field, $billingfields)) {
    			$billingdata[$field] = $value;
    			unset($data[$field]);
    		}
    	}
    	$billing->updateBillingByProjectID($pid, $billingdata);	
    	//Projekt in der project-Tabelle updaten
    	$rows_updated = $this->update($data, $this->getAdapter()->quoteInto('pid = ?',$pid));
    	return $rows_updated;
    	
    }
    
	public function getAll($where = null, $order = null, $count = null, $offset = null)
	{
		//Objekt für den aktuellen User
		$user = Zend_Auth::getInstance()->getIdentity();
		//"alle" heißt im Fall von Kunden/Entwicklern, dass nur die zugeordneten Projekte geholt werden
		if($user->rid == Model_Role::ROLE_CLIENT || $user->rid == Model_Role::ROLE_DEVELOPER) {
			$where = $this->select()
        					->from($this)
                         	->from("rel_projects_user")                       
                         	->setIntegrityCheck(false)
                         	->where('project.pid = rel_projects_user.pid')
                         	->where('rel_projects_user.uid = ?', $user->uid)
                         	->group('project.pid');
		}
		return $this->fetchAll($where, $order, $count, $offset);
	}
    
	public function getProjectByID($pid) {
    	
    	$project = $this->find($pid)->toArray();
		return count($project) == 1 ? $project[0] : false;
    	
    }
	
    public function getProjectsByClientID($cid) {
    	
    	//$tickets = $this->find($oid)->toArray();
		//return $tickets;
    	
    }
    
	public function getDefaultCostID($pid) {
    	
    	$project = $this->find($pid)->toArray();
		return count($project) == 1 ? $project[0]['default_costid'] : false;
    	
    }
    
};

?>